/**
 * 边界蒙版
 */
// import * as L from 'leaflet'
import axios from 'axios'

const BoundaryMask = function BoundaryMask(map, option) {

  self = this;
  this._map = map;
  this._extent = option.extent ? option.extent : [-180, -90, 180, 90];//遮罩矩形范围，默认xmin,ymin,xmax,ymax
  this._color = option.color ? option.color : '#FFFFFF';
  this._opacity = option.opacity != null ? option.opacity : 0.5;
  this._url = option.url;

  if (this._url) {
    axios
      .get(this._url)
      .then((res) => {
        let featureCollection = res.data;
        // let featureCollection = res;
        createMask(featureCollection.features).addTo(self._map);
      });
  } else {
    createMask().addTo(self._map);
  }


  //绘制遮罩
  function createMask(features) {
    /*画遮蔽层的相关方法
    *思路: 首先在中国地图最外画一圈，圈住理论上所有的中国领土，然后再将每个闭合区域合并进来，并全部连到西北角。
    *      这样就做出了一个经过多次西北角的闭合多边形*/
    const extent = self._extent;
    //定义中国东南西北端点，作为第一层
    // const pNW = {lat: extent[3], lng: extent[0]};
    // const pNE = {lat: extent[3], lng: extent[2]};
    // const pSE = {lat: extent[1], lng: extent[2]};
    // const pSW = {lat: extent[1], lng: extent[0]};
    const pNW = { lat: 59.0, lng: 73.0 };
    const pNE = { lat: 59.0, lng: 136.0 };
    const pSE = { lat: 3.0, lng: 136.0 };
    const pSW = { lat: 3.0, lng: 73.0 };
    //向数组中添加一次闭合多边形，并将西北角再加一次作为之后画闭合区域的起点
    let pArray = [];
    pArray.push(pNW);
    pArray.push(pSW);
    pArray.push(pSE);
    pArray.push(pNE);
    pArray.push(pNW);
    //循环添加各闭合区域
    if (features && features.length > 0) {
      features.forEach(feature => {
        const coordinates = feature.geometry.coordinates;
        coordinates.forEach(coord => {
          const points = [];
          coord.forEach(pt => {
            points.push({lat: pt[1], lng: pt[0]});
          });
          //将闭合区域加到遮蔽层上，每次添加完后要再加一次西北角作为下次添加的起点和最后一次的终点
          pArray = pArray.concat(points);
          pArray.push(pArray[0]);
        });
      });
    }
    //添加遮蔽层
    return L.polygon(pArray, {color: 'transparent', fillColor: self._color, fillOpacity: self._opacity}); //建立多边形覆盖物
  }
}

export default BoundaryMask
